package com.sais.manage.boot.building.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sais.manage.boot.building.dto.RoomDTO;
import com.sais.manage.boot.building.dto.RoomSearchDTO;
import com.sais.manage.boot.building.dto.UserRoomDTO;
import com.sais.manage.boot.building.entity.Room;
import com.sais.manage.boot.platform.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 宿舍管理系统-房间 mapper 接口
 *
 * @author zwp
 * @date 2020/1/30
 **/
@Mapper
public interface RoomMapper extends BaseMapper<Room> {

    /**
     * 添加房间信息
     *
     * @param room
     * @return
     */
    boolean createRoom(@Param("room") Room room);

    /**
     * 根据 房间id 删除
     *
     * @param roomId
     * @return
     */
    boolean deleteRoom(@Param("roomId") String roomId);

    /**
     * 根据 房间id 查询信息
     *
     * @param roomId
     * @return
     */
    RoomDTO selectRoom(@Param("roomId") String roomId);

    /**
     * 分页 条件查询 房间信息
     *
     * @param page
     * @param roomSearchDTO
     * @return
     */
    Page<RoomDTO> listRoom(@Param("page") Page<RoomDTO> page, @Param("roomSearchDTO") RoomSearchDTO roomSearchDTO);

    /**
     * 绑定 宿舍楼 房间
     *
     * @param buildingId
     * @param roomId
     * @return
     */
    boolean bindBuildingRoom(@Param("buildingId") String buildingId, @Param("roomId") String roomId);

    /**
     * 根据宿舍楼id 查询所有房间
     *
     * @param buildingId
     * @return
     */
    List<RoomDTO> listRoomByBuildingId(@Param("buildingId") String buildingId);

    /**
     * 根据用户 id 查询房间信息
     *
     * @param userId
     * @return
     */
    UserRoomDTO selectRoomByUserId(@Param("userId") String userId);

    /**
     * 绑定 房间 用户
     *
     * @param userId
     * @param roomId
     * @return
     */
    boolean bindRoomUser(@Param("userId") String userId, @Param("roomId") String roomId);

    /**
     * 根据用户id 删除与房间绑定信息
     * @param userId
     * @return
     */
    boolean unBindRoomUser(@Param("userId") String userId);

    /**
     * 批量解绑用户和房间信息
     *
     * @param users
     * @return
     */
    boolean batchUnBindRoomUser(@Param("users") List<User> users);

    /**
     * 根据 宿舍楼id 查询该宿舍楼 可入住房间
     *
     * @param buildingId
     * @return
     */
    List<RoomDTO> listAvailRoom(@Param("buildingId") String buildingId);

    /**
     * 根据 宿舍楼id 查询该宿舍楼 可入住房间
     *
     * @param buildingId
     * @param roomCode
     * @return
     */
    List<RoomDTO> listLimitAvailRoom(@Param("buildingId") String buildingId, @Param("roomCode") String roomCode);

    /**
     * 查询房间人数
     *
     * @param roomId
     * @return
     */
    Integer countRoomUser(@Param("roomId") String roomId);

    /**
     * 更新房间 居住人数
     *
     * @param roomId
     * @param count
     * @return
     */
    boolean updateCount(@Param("roomId") String roomId, @Param("count") Integer count);

    /**
     * 根据id 查询房间名称
     *
     * @param roomId
     * @return
     */
    String selectRoomNameByRoomId(@Param("roomId") String roomId);
}
